package DAO;

import java.util.List;

import metier.Film;
import metier.Personne;

public class DAOFilmJPA extends DAOJPA implements DAOFilm{

	private static DAOFilmJPA instance=null;
	
	private DAOFilmJPA() {}
	
	public static DAOFilmJPA getInstance() {
		if(instance == null)
			instance = new DAOFilmJPA();
		return instance;
	}


	@Override
	public Film get(int id) {
		Film film = DAOJPA.getManager().find(Film.class, id);
		return film;
	}

	@Override
	public void save(Film film) {
		if(film.getId() != -1)
			throw new IllegalArgumentException("film d�ja enregistr�");
		for (int i=0;i<film.nbActeurs();i++)
			if(film.getActeur(i).getId() == -1)
				throw new IllegalArgumentException("acteur associ� � l'article non enregistr� :\n" +film.getActeur(i));
		for (int i=0;i<film.nbProducteurs();i++)
			if(film.getProducteur(i).getId() == -1)
				throw new IllegalArgumentException("producteur associ� � l'article non enregistr� :\n" +film.getProducteur(i));
		for (int i=0;i<film.nbRealisateurs();i++)
			if(film.getRealisateur(i).getId() == -1)
				throw new IllegalArgumentException("realisateur associ� � l'article non enregistr� :\n" +film.getRealisateur(i));
		
		DAOJPA.getManager().persist(film);
		DAOJPA.commit();
		
	}
	
	@Override
	public void update(Film film) {
		if(film.getId() == -1)
			throw new IllegalArgumentException("le film n'existe pas dans la bdd");	
		DAOJPA.getManager().createNativeQuery("UPDATE Film SET titre_film="+film.getTitre()+",annee_film="+film.getAnnee()+", cout_film="+film.getCout()+" WHERE id_film="+film.getId()+"",Film.class);	
		DAOJPA.commit();
	}

	@Override
	public void remove(Film film) {
		if(film.getId() == -1)
			throw new IllegalArgumentException("film d�ja supprim�");

		DAOJPA.getManager().remove(film);
		DAOJPA.commit();
		film.setId(-1);
		
	}

	@Override
	public int getNombreFilms() {
		Long L = (Long)getManager().createQuery("SELECT COUNT(f) FROM Film f").getSingleResult();
		return L.intValue();
	}


	@Override
	public List<Film> loadAll() {
		return  DAOJPA.getManager().createQuery("SELECT f FROM Film f",Film.class).getResultList();
	}


	@SuppressWarnings("unchecked")
	@Override
	public List<Film> loadAllWithName(String name) {
		String query="SELECT * FROM film WHERE titre_film LIKE '%"+name+"%'";
		return  DAOJPA.getManager().createNativeQuery(query,Film.class).getResultList();
	}

	
	@Override
	public String getRoleWithFilm(int idFilm, int idPers) {
		return   DAOJPA.getManager().createNativeQuery("SELECT * FROM joue WHERE id_personne="+idPers+" and id_film="+idFilm).getResultList().toString();
	}
	
	
	@Override
	public void addActeur(Film film, Personne personne) {
		if(film.getId() == -1)
			throw new IllegalArgumentException("le film n'existe pas dans la bdd");	
		DAOJPA.getManager().createNativeQuery("INSERT INTO joue VALUES ('"+personne.getId()+"','"+film.getId()+"')",Film.class);
	}
	
	
	
	
}
